Repository navigation
busy ack: a member Bot in a group room is silent while its turn runs (#1584 room side) - #1648
Conversation
c7b9437 to
1fbcf25
Compare
|
Verdict: PASS at 1fbcf25 Ran at this tip: Review points (tip 1fbcf25, base f86d7b6 = live main, 17 files, all in the change set):
|
|
Written-by: Enqueue 823d Not a verdict — merge-queue status only. The four checks pass at 1fbcf25 (PASS by Reviewer at this tip, every check green, no hold, checkpoint block valid), but the branch can no longer enter the queue:
The fork branch needs its author to bring it onto 2dac2eb and re-check the behaviour against #1656/#1657; this is not a textual conflict alone. The PASS at 1fbcf25 stays valid only for a tip that changes none of the reviewed files, so the rework will need a fresh PASS at the new tip. |
1fbcf25 to
01bdd9c
Compare
|
@Birfy review request for the current tip. Tip: As of my read just now: 15 check runs, all completed — What changed at this tip: rebased onto Please give the formal Verdict at |
|
Verdict: PASS at 01bdd9c Ran at this tip: Review points (tip 01bdd9c, base 2dac2eb = live main, one commit ahead, 17 files):
|
Fixes #1646
Owner: Dev3
Written-by: Dev-3
Reviewer: Reviewer
Branch: dev/3-busy-ack-in-a-group-room
Base: 2dac2eb
Tip: 01bdd9c
Tree: 842f9ed48bc6f82abc9d43688ce6f2308e74add8
Claim: e9782fb6143d464fbf621caa92c96da7
What and why
A person's line in a group chat is relayed to the member it addresses as
role: 'room'(source kindbot), into the member's hidden room Session.shouldNoteBusyAckonly acceptedsource.kind === 'user'pluschatOwners, so a member busy with a tool said nothing until its step ended — the silence #1584 removed, on the surface the team actually works in.The host now notes the same one short ack when a person's room line reaches a member Session in
groupOwnersthat has a live turn, strips the relay header before composing (so the ack quotes the person, not[Group chat …]), and publishes it per member asroom.busyAcks. The client draws it on the room flow's running row with that member's mark (roomBusyAck), while the own-chat bubble path is untouched: same predicate, same coalesce window, same composer, same clear-on-turn/end and idle.Not changed:
COALESCE_MS, the composer and its template pools,{t}/{d}quoting (#1634),steering-interrupt.js, and what the store indexes contain (the view reads them).The client behaviour now has its own paragraph in
docs/subsystems/core-client.md, whicharch-docsasks for because this branch changescore-clientfiles: the room flow draws an ack only while that member's turn runs (the host clears it onturn/endand onagent/statusidle), only for a person's room line —isHumanRoomLine(source)excludes the Bot's own call (senderSessionId), another Bot's @-mention (askedBy) and a friend's Bot (remote) — and only after the relay header is stripped, so the ack quotes the person. The own-chat bubble and its visibility rules are untouched.Adapted to #1656's blinking indicator
#1656(bc738e86) removedBUSY_ACK_KEYand made a pending own-chat ack draw the Bot's mark and a blinking indicator instead of a fixed sentence;busyAckText(hostAck)now lives inbusy-ack-logic.jswith atrim(), andbusyAckPending(hostAck)says when no line is here yet. This branch keeps that shape and reuses it for the room rather than adding a second rendering:busy-ack-logic.jskeeps Busy-ack: client still shows the canned fallback 「看到了,这步做完就接着处理你这条。」 while the host ack is pending #1656'sbusyAckText/busyAckPending/busyAckVisibleand addsroomBusyAck(room)(the newestroom.busyAcksentry, its text read throughbusyAckText, so a blank line counts as no line) androomBusyAckVisible({ ack, pendingBusy }).BusyAckBubblein room mode feeds the member's ack into the same bubble Busy-ack: client still shows the canned fallback 「看到了,这步做完就接着处理你这条。」 while the host ack is pending #1656 renders: the host's line as text, or — while the person's line is still queued in the room and the member's line is not here — the samebt-busy-dots/aria-busy/data-pendingindicator the own-chat pending state draws. No fixed sentence is revived.roomBusyAcksView(sessions)now names every member whose turn runs in the room: with its composed line when there is one, and with an empty text (at: 0) when the turn started before the line was composed. A member without a running turn, and a room whose members are idle, produce no entry.So the one-line answer to "what does the room show before the member's ack lands": the same three-dot blinking indicator under that member's
BotMark, with no text, exactly as the own-chat pending ack; the host's composed line replaces it the moment it is published.docs/subsystems/core-client.mdkeeps both sides: #1656's sentence-removed description and this branch's three room rules, with the pending-dots case added to the first rule.Main moved twice while this branch waited. First onto
f86d7b62(#16454f2185db,#164348fe6f4a,#1641f86d7b62), where#1641changedcore/client.jsandpatches/ds-bot/*. Then onto the current2dac2eb4d97f6275353d0bf87424bc33afe084d6(#1656bc738e86,#16545a91439d,#16522dac2eb4), where#1656is a semantic collision as well as a textual one: it rewrote the same busy-ack client files this branch touches. Both times the branch was brought onto the new base, the hand-written conflicts were resolved keeping both sides, and the generated files (core/client.js,patches/ds-bot/*) were rebuilt in the tree withnpm --prefix core run buildandnode scripts/ds-bot-patches.mjs generaterather than merged by hand;checkreports10 patches apply cleanly in orderandcore/ equals ds-bot/ + patches/ds-bot/. The hand-written sources keep the red commitde4d1ee6and the fix commit3a18f967as they were, and the #1656 adaptation is the top merge on top of them.Red commit
de4d1ee6: the new cases install the real store (realchatOwners+groupOwners) and use the relay shapedelivery.jswrites; onc26089f5they are 12 pass / 2 fail (not ok 12,not ok 14). Green at the tip:verifyran at local3a18f9672195c8ec358ff5e4103d40bf77a42ba3, whose tree is the pushed tree0bdf65580ec1cf815d85acc9a831d9c195114814(the push helper squashes; the red commitde4d1ee6stays on the local parent chain, the agreed mechanism).Ran
cd core && node --import ./test/harness-resolve.mjs --test test/busy-ack.test.js test/busy-ack-client.test.js— 21 tests, 21 pass (17 for this branch, plus Busy-ack: client still shows the canned fallback 「看到了,这步做完就接着处理你这条。」 while the host ack is pending #1656's 4; the red commit was 12/14, 2 fail).TZ=UTC ARCH_DOCS_BASE=2dac2eb4d97f6275353d0bf87424bc33afe084d6 npm run verify— exit 0: core 1941, social 539, tree 125, timeline 129, workflow 241,.github549, interop 37, live-e2e 24, allfail 0; oxlint 0 errors (warnings core 64, social 36, timeline 9, tree 2, workflow 15);arch-docs: OK (17 changed file(s));ok 10 patches apply cleanly in orderandok core/ equals ds-bot/ + patches/ds-bot/; changelog valid.node scripts/ds-bot-patches.mjs generate+check;npm run buildincore/(client.js rebuilt, never hand-edited).Not run
npm run verify; this change touches neitherindex.jsnor the host turn loop.Checkpoint
{
"pr": 1648,
"claim": "Dev3",
"issue": 1646,
"summary": "A group member's running turn now acks a person's line in the room, the same one short line the own-chat path speaks. The host accepts the relayed room message into a live group Session, strips the relay header before composing, and publishes the ack per member. The client draws it on the room flow's running row with that member's mark, or the same blinking indicator #1656 draws while the line is still on its way; the own-chat path is unchanged.",
"files": ["core/src/host/busy-ack.js", "core/src/client/busy-ack.js", "core/src/client/busy-ack-logic.js", "core/src/host/channel.js", "core/test/busy-ack.test.js", "core/test/busy-ack-client.test.js", "docs/subsystems/core-client.md"],
"checks": { "ran": "TZ=UTC ARCH_DOCS_BASE=2dac2eb4d97f6275353d0bf87424bc33afe084d6 npm run verify", "result": "green", "at": "01bdd9c2824d579af10a521b9c1067facd7f1f4b" },
"next": "none — ready for review"
}